gtkdnd: Don't bind/unbind keycodes that couldn't be determined
authorDaniel Drake <dsd@laptop.org>
Sun, 12 Jun 2011 16:48:17 +0000 (17:48 +0100)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 13 Jun 2011 01:44:00 +0000 (21:44 -0400)
At http://dev.laptop.org/ticket/10643 we are seeing that drag-and-drop
within the Sugar shell causes all of Sugar's custom keybindings to be
removed.

This is because gtkdnd tries to unbind XK_KP_Space, which (on my systems)
is resolved to NoSymbol by XKeycodeToKeysym(). NoSymbol has value 0,
the same as AnyKey, and XUngrabKey(AnyKey) is equivalent to unbinding
all possible keycodes.

Fix this by catching NoSymbol before binding/unbinding.

https://bugzilla.gnome.org/show_bug.cgi?id=652402

gtk/gtkdnd.c

index 4805a6fe18e582204e15031091ecbee1939a13f6..617a02e312480b4ce43dca0e3005b0e36118e553 100644 (file)
@@ -475,6 +475,8 @@ grab_dnd_keys (GtkWidget *widget,
   for (i = 0; i < G_N_ELEMENTS (grab_keys); ++i)
     {
       keycode = XKeysymToKeycode (GDK_WINDOW_XDISPLAY (window), grab_keys[i].keysym);
+      if (keycode == NoSymbol)
+        continue;
       XGrabKey (GDK_WINDOW_XDISPLAY (window),
                keycode, grab_keys[i].modifiers,
                GDK_WINDOW_XID (root),
@@ -508,6 +510,8 @@ ungrab_dnd_keys (GtkWidget *widget,
   for (i = 0; i < G_N_ELEMENTS (grab_keys); ++i)
     {
       keycode = XKeysymToKeycode (GDK_WINDOW_XDISPLAY (window), grab_keys[i].keysym);
+      if (keycode == NoSymbol)
+        continue;
       XUngrabKey (GDK_WINDOW_XDISPLAY (window),
                  keycode, grab_keys[i].modifiers,
                   GDK_WINDOW_XID (root));